﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace DesignPattern
{
    class Danli3
    {
        // Lazy<T>在不传参初始化时 要求类T 有public的无参构造函数。
        // 而在单例模式中要求构造函数私有，所有采用传委托方式初始化，在委托中调用私有的构造函数完成初始化
        private static readonly Lazy<Danli3> instance = new Lazy<Danli3>(()=>new Danli3());
        private int count = 0;
        private Danli3() { }    // 构造私有

        public static Danli3 Instance
        {
            get
            {
                return instance.Value;      // 第一次调用 .Value时实例才被创建
            }
        }

        public void IncreatCount()
        {
            Interlocked.Increment(ref count);
        }

        public int Count
        {
            get
            {
                return count;
            }
        }
    }

    

}
